package com.yc.jpyy.oadocitem.controller;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.common.utils.manydatasource.HandlerDataSource;
import com.yc.jpyy.base.bean.RestResponse;
import com.yc.jpyy.base.controller.BaseController;
import com.yc.jpyy.base.util.PageBean;
import com.yc.jpyy.oadocitem.service.OADocItemService;
import com.yc.jpyy.utils.Tools;




@Controller
@RequestMapping(value = "/OADocItem")
@Scope("prototype")
public class OADocItemController extends BaseController {
	
	@Autowired
	private OADocItemService oaDocItemService;
    private static Logger logger = LoggerFactory.getLogger(OADocItemController.class);
	
    //新增
	@SuppressWarnings("finally")
	@RequestMapping(value = "/addOADocItem", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String addOADocItem(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		
		try{
			String info = request.getParameter("info");
			System.out.println("info"+info);
			//设置数据源
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			System.out.println("paramsMap"+paramsMap);
			String dbcode = paramsMap.get("dbcode").toString();
		    HandlerDataSource.setDataSource(dbcode);
		    oaDocItemService.addOADocItemService(paramsMap);
			logger.info("新增成功");
			response.setReturnMsg(1, "操作成功");
			return response.toJSON();
			
		} catch (Exception e) {
			logger.error("新增处理异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			response.setReturnException(e.toString());
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
	
	
	    //删除处理 物理删除
 		@SuppressWarnings("finally")
		@RequestMapping(value = "/delOADocItem", method = { RequestMethod.GET,
				RequestMethod.POST }, produces = "application/json; charset=utf-8")
		public @ResponseBody String delOADocItem(HttpServletRequest request) throws UnsupportedEncodingException {
			
			RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
			try{
				String info = request.getParameter("info");
				System.out.println("info"+info);
				Map<String,Object> paramsMap = Tools.JsonToMap(info);
				System.out.println("paramsMap"+paramsMap);
				String ids = paramsMap.get("ids").toString();
				String[] idarray = ids.split(",");
				paramsMap.put("idarray", idarray);
				String dbcode = paramsMap.get("dbcode").toString();
			    //设置数据源
				HandlerDataSource.setDataSource(dbcode);
				int ret = oaDocItemService.delOADocItemService(paramsMap);
				if(ret>0) {
					response.setReturnMsg(1, "删除成功");
					return response.toJSON();
				}
				else{
				    response.setReturnMsg(0, "删除失败");
				    return response.toJSON();
				}
				
			} catch (Exception e) {
				logger.error("删除异常" + e.toString());
				// 异常信息
				response.setReturnCode(0);
				response.setReturnMsg("操作失败");
				response.setReturnException(e.toString());
				e.printStackTrace();
			}
			
			finally {
				HandlerDataSource.clear();
				return response.toJSON();
			}
			
		}
	//查询单条
	@SuppressWarnings("finally")
	@RequestMapping(value = "/findOADocItemByID", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String findOADocItemByID(HttpServletRequest request) throws UnsupportedEncodingException {

		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		try {
			String info = request.getParameter("info");
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			System.out.println("paramsMap"+paramsMap);
			String dbcode = paramsMap.get("dbcode").toString();
		    HandlerDataSource.setDataSource(dbcode);
			Integer id = Integer.parseInt(paramsMap.get("id").toString());
			System.out.println(id);
			//设置数据源
			HandlerDataSource.setDataSource(dbcode);
			Map<String, Object> val = oaDocItemService.findOADocItemByIDServer(paramsMap);
			int retSize = val.size();
			if(retSize==0) {
	            response.setReturnMsg(1, "无查询数据");
				return response.toJSON();
			}else {
				 response.setReturnMsg(1, "查询单条数据成功");
				 response.setListData(val);
				 return response.toJSON();
			}
		} catch (Exception e) {
            logger.error("查询单条数据异常" + e.toString());
			// 异常信息
            response.setReturnException(e.toString());
			response.setReturnCode(0);
			response.setReturnMsg("查询单条数据异常");
		} finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
	}
	
	//修改
	@SuppressWarnings("finally")
	@RequestMapping(value = "/updateOADocItem", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String updateOADocItem(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		
		try{
			String info = request.getParameter("info");
			System.out.println(info);
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			String dbcode = paramsMap.get("dbcode").toString();
			//设置数据源
		    HandlerDataSource.setDataSource(dbcode);
		    oaDocItemService.updateOADocItemService(paramsMap);
			response.setReturnMsg(1, "操作成功");
			return response.toJSON();
			
		} catch (Exception e) {
			logger.info("修改违章处理异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
	
	//查询所有（查询条件并且分页）
	@SuppressWarnings("finally")
	@RequestMapping(value = "/findOADocItem", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String findOADocItem(HttpServletRequest request) throws UnsupportedEncodingException {

		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		request.setCharacterEncoding("UTF-8");
		try {
			String info = request.getParameter("info");
			System.out.println("info"+info);
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			String dbcode = paramsMap.get("dbcode").toString();
			//设置数据源
			HandlerDataSource.setDataSource(dbcode);
			//paramsMap.put("audistate", Optional.ofNullable(paramsMap.get("audistate")).orElse("").toString().trim());
			PageBean pageBean = oaDocItemService.findOADocItemService(paramsMap);
            response.setReturnMsg(1, "操作成功");
            response.setTotalCount(pageBean.getAllRow());
            response.setTotalPage(pageBean.getTotalPage());
			response.setListData(pageBean.getList());
			return response.toJSON();
            
		} catch (Exception e) {
			logger.error("findCompany" + e.toString());
			response.setReturnCode(1);
			response.setReturnMsg("查询失败");
			response.setReturnException(e.toString());
		} finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
	}
	
	//催文
	@SuppressWarnings("finally")
	@RequestMapping(value = "/updateOADocItemUserIDStatus", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String updateOADocItemUserIDStatus(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		try{
			String info = request.getParameter("info");
			System.out.println("info"+info);
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			System.out.println("paramsMap"+paramsMap);
			String userids = paramsMap.get("userids").toString();
			String[] idarray = userids.split(",");
			paramsMap.put("idarray", idarray);
			String dbcode = paramsMap.get("dbcode").toString();
		    //设置数据源
			HandlerDataSource.setDataSource(dbcode);
			int ret = oaDocItemService.updateOADocItemUserIDStatusService(paramsMap);
			if(ret>0) {
				response.setReturnMsg(1, "更新成功");
				return response.toJSON();
			}
			else{
			    response.setReturnMsg(0, "更新失败");
			    return response.toJSON();
			}
			
		} catch (Exception e) {
			logger.error("异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			response.setReturnException(e.toString());
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
		
	@SuppressWarnings("finally")
	@RequestMapping(value = "/updateOADocItemStatus", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String updateOADocItemStatus(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		try{
			String info = request.getParameter("info");
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			String ids = paramsMap.get("ids").toString();
			String[] idarray = ids.split(",");
			paramsMap.put("idarray", idarray);
			String dbcode = paramsMap.get("dbcode").toString();
		    //设置数据源
			HandlerDataSource.setDataSource(dbcode);
			int ret = oaDocItemService.updateOADocItemStatusService(paramsMap);
			if(ret >= 0) {
				response.setReturnMsg(1, "更新成功");
				return response.toJSON();
			}
			else{
			    response.setReturnMsg(0, "更新失败");
			    return response.toJSON();
			}
			
		} catch (Exception e) {
			logger.error("异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			response.setReturnException(e.toString());
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
	
	//批量更新状态
		@SuppressWarnings("finally")
		@RequestMapping(value = "/updateOADocItemStatusOnetoX", method = { RequestMethod.GET,
				RequestMethod.POST }, produces = "application/json; charset=utf-8")
		public @ResponseBody String updateOADocItemStatusOnetoX(HttpServletRequest request) throws UnsupportedEncodingException {
			
			RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
			
			try{
				String info = request.getParameter("info");
				System.out.println(info);
				Map<String,Object> paramsMap = Tools.JsonToMap(info);
				String dbcode = paramsMap.get("dbcode").toString();
				//设置数据源
			    HandlerDataSource.setDataSource(dbcode);
			    oaDocItemService.updateOADocItemStatusOnetoXService(paramsMap);
				response.setReturnMsg(1, "操作成功");
				return response.toJSON();
				
			} catch (Exception e) {
				logger.info("修改违章处理异常" + e.toString());
				// 异常信息
				response.setReturnCode(0);
				response.setReturnMsg("操作失败");
				e.printStackTrace();
			}
			
			finally {
				HandlerDataSource.clear();
				return response.toJSON();
			}
			
		}
		
		 //文件传达明细

	   	@SuppressWarnings("finally")
	   	@RequestMapping(value = "/findOADocItemByParentid", method = { RequestMethod.GET,
	   			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	   	public @ResponseBody String findOADocItemByParentid(HttpServletRequest request) throws UnsupportedEncodingException {

	   		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
	   		request.setCharacterEncoding("UTF-8");
	   		try {
	   			String info = request.getParameter("info");
	   			System.out.println("info"+info);
	   			Map<String,Object> paramsMap = Tools.JsonToMap(info);
	   			String dbcode = paramsMap.get("dbcode").toString();
	   			//设置数据源
	   			HandlerDataSource.setDataSource(dbcode);
	   			List list = oaDocItemService.findOADocItemByParentidService(paramsMap);
	            response.setReturnMsg(1, "操作成功");
	            response.setListData(list);
	   			return response.toJSON();
	               
	   		} catch (Exception e) {
	   			logger.error("findOADocItemByParentidService" + e.toString());
	   			response.setReturnCode(1);
	   			response.setReturnMsg("查询失败");
	   			response.setReturnException(e.toString());
	   		} finally {
	   			HandlerDataSource.clear();
	   			return response.toJSON();
	   		}
	   	}
	   	
	   	/**
		 * 根据Id更改状态
		 * 
		 * @param request
		 * @return
		 * @throws UnsupportedEncodingException
		 */
		@SuppressWarnings("finally")
		@RequestMapping(value = "/updateOadocItemStatusById", method = { RequestMethod.GET,
				RequestMethod.POST }, produces = "application/json; charset=utf-8")
		public @ResponseBody String updateOadocItemStatusById(HttpServletRequest request) throws UnsupportedEncodingException {
			request.setCharacterEncoding("UTF-8");
			Map<String,Object> resultMap = new HashMap<>();
			try {
				String checkParameter= request.getParameter("info");
				Map<String,Object> paramsMap = Tools.JsonToMap(checkParameter);
				String dbcode = paramsMap.get("dbcode").toString();
				HandlerDataSource.setDataSource(dbcode);
				resultMap = oaDocItemService.updateOadocItemStatusById(paramsMap);
				resultMap.put("pubKey",Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
			} catch (Exception e) {
				logger.info("updateOadocItemStatusById" + e.toString());
				resultMap.put("returnCode", 0);
				resultMap.put("returnMsg", "更改失败");
			} finally {
				HandlerDataSource.clear();
				return JSON.toJSONString(resultMap);
			}
			
		}
}
